home *** CD-ROM | disk | FTP | other *** search
/ Hyper Stacks 1994 May / Hyper Stacks (Pacific HiTech)(1994)[Mac].iso / HyperTalk / LightSpeed HC XCMD kit / XCMD Utilities.p < prev   
Encoding:
Text File  |  1987-11-11  |  8.6 KB  |  481 lines  |  [TEXT/PJMM]

  1. { Hypercard XCMD utilities unit for Lightspeed Pascal }
  2.  
  3. { (c) 1987 Symantec Corp.  THINK Technologies Division }
  4.  
  5. { Adapted for use with Lightspeed Pascal from information provided }
  6. { by Apple Computer, Inc. }
  7.  
  8. UNIT XCMDUtils;
  9.  
  10. INTERFACE
  11.  
  12.     USES
  13.         XCMDIntf;
  14.  
  15.     TYPE
  16.         Str31 = STRING[31];
  17.  
  18.     FUNCTION StringMatch (paramPtr : XCmdPtr;
  19.                                     pattern : Str255;
  20.                                     target : Ptr) : Ptr;
  21.  
  22.     FUNCTION PasToZero (paramPtr : XCmdPtr;
  23.                                     str : Str255) : Handle;
  24.  
  25.     PROCEDURE ZeroToPas (paramPtr : XCmdPtr;
  26.                                     zeroStr : Ptr;
  27.                                     VAR pasStr : Str255);
  28.  
  29.     FUNCTION StrToLong (paramPtr : XCmdPtr;
  30.                                     str : Str31) : LongInt;
  31.  
  32.     FUNCTION StrToNum (paramPtr : XCmdPtr;
  33.                                     str : Str31) : LongInt;
  34.  
  35.     FUNCTION StrToBool (paramPtr : XCmdPtr;
  36.                                     str : Str31) : BOOLEAN;
  37.  
  38.     FUNCTION StrToExt (paramPtr : XCmdPtr;
  39.                                     str : Str31) : Extended;
  40.  
  41.     FUNCTION LongToStr (paramPtr : XCmdPtr;
  42.                                     posNum : LongInt) : Str31;
  43.  
  44.     FUNCTION NumToStr (paramPtr : XCmdPtr;
  45.                                     num : LongInt) : Str31;
  46.  
  47.     FUNCTION NumToHex (paramPtr : XCmdPtr;
  48.                                     num : LongInt;
  49.                                     nDigits : INTEGER) : Str31;
  50.  
  51.     FUNCTION ExtToStr (paramPtr : XCmdPtr;
  52.                                     num : Extended) : Str31;
  53.  
  54.     FUNCTION BoolToStr (paramPtr : XCmdPtr;
  55.                                     bool : BOOLEAN) : Str31;
  56.  
  57.     PROCEDURE SendCardMessage (paramPtr : XCmdPtr;
  58.                                     msg : Str255);
  59.  
  60.     FUNCTION EvalExpr (paramPtr : XCmdPtr;
  61.                                     expr : Str255) : Handle;
  62.  
  63.     FUNCTION StringLength (paramPtr : XCmdPtr;
  64.                                     strPtr : Ptr) : LongInt;
  65.  
  66.     FUNCTION GetGlobal (paramPtr : XCmdPtr;
  67.                                     globName : Str255) : Handle;
  68.  
  69.     PROCEDURE SetGlobal (paramPtr : XCmdPtr;
  70.                                     globName : Str255;
  71.                                     globValue : Handle);
  72.  
  73.     FUNCTION GetFieldByName (paramPtr : XCmdPtr;
  74.                                     cardFieldFlag : BOOLEAN;
  75.                                     fieldName : Str255) : Handle;
  76.  
  77.     FUNCTION GetFieldByNum (paramPtr : XCmdPtr;
  78.                                     cardFieldFlag : BOOLEAN;
  79.                                     fieldNum : INTEGER) : Handle;
  80.  
  81.     FUNCTION GetFieldByID (paramPtr : XCmdPtr;
  82.                                     cardFieldFlag : BOOLEAN;
  83.                                     fieldID : INTEGER) : Handle;
  84.  
  85.     PROCEDURE SetFieldByName (paramPtr : XCmdPtr;
  86.                                     cardFieldFlag : BOOLEAN;
  87.                                     fieldName : Str255;
  88.                                     fieldVal : Handle);
  89.  
  90.     PROCEDURE SetFieldByNum (paramPtr : XCmdPtr;
  91.                                     cardFieldFlag : BOOLEAN;
  92.                                     fieldNum : INTEGER;
  93.                                     fieldVal : Handle);
  94.  
  95.     PROCEDURE SetFieldByID (paramPtr : XCmdPtr;
  96.                                     cardFieldFlag : BOOLEAN;
  97.                                     fieldID : INTEGER;
  98.                                     fieldVal : Handle);
  99.  
  100.     FUNCTION StringEqual (paramPtr : XCmdPtr;
  101.                                     str1, str2 : Str255) : BOOLEAN;
  102.  
  103.     PROCEDURE ReturnToPas (paramPtr : XCmdPtr;
  104.                                     zeroStr : Ptr;
  105.                                     VAR pasStr : Str255);
  106.  
  107.     PROCEDURE ScanToReturn (paramPtr : XCmdPtr;
  108.                                     VAR scanPtr : Ptr);
  109.  
  110.     PROCEDURE ScanToZero (paramPtr : XCmdPtr;
  111.                                     VAR scanPtr : Ptr);
  112.  
  113.     PROCEDURE ZeroBytes (paramPtr : XCmdPtr;
  114.                                     dstPtr : Ptr;
  115.                                     longCount : LongInt);
  116.  
  117. IMPLEMENTATION
  118.  
  119.     PROCEDURE DoJsr (addr : ProcPtr);
  120.     INLINE
  121.         $205F, $4E90;
  122.  
  123.     FUNCTION StringMatch;
  124.     BEGIN
  125.         WITH paramPtr^ DO
  126.             BEGIN
  127.                 inArgs[1] := ORD(@pattern);
  128.                 inArgs[2] := ORD(target);
  129.                 request := xreqStringMatch;
  130.                 DoJsr(entryPoint);
  131.                 StringMatch := Ptr(outArgs[1]);
  132.             END;
  133.     END;
  134.  
  135.  
  136.     FUNCTION PasToZero;
  137.     BEGIN
  138.         WITH paramPtr^ DO
  139.             BEGIN
  140.                 inArgs[1] := ORD(@str);
  141.                 request := xreqPasToZero;
  142.                 DoJsr(entryPoint);
  143.                 PasToZero := Handle(outArgs[1]);
  144.             END;
  145.     END;
  146.  
  147.  
  148.     PROCEDURE ZeroToPas;
  149.     BEGIN
  150.         WITH paramPtr^ DO
  151.             BEGIN
  152.                 inArgs[1] := ORD(zeroStr);
  153.                 inArgs[2] := ORD(@pasStr);
  154.                 request := xreqZeroToPas;
  155.                 DoJsr(entryPoint);
  156.             END;
  157.     END;
  158.  
  159.  
  160.     FUNCTION StrToLong;
  161.     BEGIN
  162.         WITH paramPtr^ DO
  163.             BEGIN
  164.                 inArgs[1] := ORD(@str);
  165.                 request := xreqStrToLong;
  166.                 DoJsr(entryPoint);
  167.                 StrToLong := outArgs[1];
  168.             END;
  169.     END;
  170.  
  171.  
  172.     FUNCTION StrToNum;
  173.     BEGIN
  174.         WITH paramPtr^ DO
  175.             BEGIN
  176.                 inArgs[1] := ORD(@str);
  177.                 request := xreqStrToNum;
  178.                 DoJsr(entryPoint);
  179.                 StrToNum := outArgs[1];
  180.             END;
  181.     END;
  182.  
  183.  
  184.     FUNCTION StrToBool;
  185.     BEGIN
  186.         WITH paramPtr^ DO
  187.             BEGIN
  188.                 inArgs[1] := ORD(@str);
  189.                 request := xreqStrToBool;
  190.                 DoJsr(entryPoint);
  191.                 StrToBool := BOOLEAN(outArgs[1]);
  192.             END;
  193.     END;
  194.  
  195.  
  196.     FUNCTION StrToExt;
  197.         VAR
  198.             x : Extended;
  199.     BEGIN
  200.         WITH paramPtr^ DO
  201.             BEGIN
  202.                 inArgs[1] := ORD(@str);
  203.                 inArgs[2] := ORD(@x);
  204.                 request := xreqStrToExt;
  205.                 DoJsr(entryPoint);
  206.                 StrToExt := x;
  207.             END;
  208.     END;
  209.  
  210.  
  211.     FUNCTION LongToStr;
  212.         VAR
  213.             str : Str31;
  214.     BEGIN
  215.         WITH paramPtr^ DO
  216.             BEGIN
  217.                 inArgs[1] := posNum;
  218.                 inArgs[2] := ORD(@str);
  219.                 request := xreqLongToStr;
  220.                 DoJsr(entryPoint);
  221.                 LongToStr := str;
  222.             END;
  223.     END;
  224.  
  225.  
  226.     FUNCTION NumToStr;
  227.         VAR
  228.             str : Str31;
  229.     BEGIN
  230.         WITH paramPtr^ DO
  231.             BEGIN
  232.                 inArgs[1] := num;
  233.                 inArgs[2] := ORD(@str);
  234.                 request := xreqNumToStr;
  235.                 DoJsr(entryPoint);
  236.                 NumToStr := str;
  237.             END;
  238.     END;
  239.  
  240.  
  241.     FUNCTION NumToHex;
  242.         VAR
  243.             str : Str31;
  244.     BEGIN
  245.         WITH paramPtr^ DO
  246.             BEGIN
  247.                 inArgs[1] := num;
  248.                 inArgs[2] := nDigits;
  249.                 inArgs[3] := ORD(@str);
  250.                 request := xreqNumToHex;
  251.                 DoJsr(entryPoint);
  252.                 NumToHex := str;
  253.             END;
  254.     END;
  255.  
  256.  
  257.     FUNCTION ExtToStr;
  258.         VAR
  259.             str : Str31;
  260.     BEGIN
  261.         WITH paramPtr^ DO
  262.             BEGIN
  263.                 inArgs[1] := ORD(@num);
  264.                 inArgs[2] := ORD(@str);
  265.                 request := xreqExtToStr;
  266.                 DoJsr(entryPoint);
  267.                 ExtToStr := str;
  268.             END;
  269.     END;
  270.  
  271.  
  272.     FUNCTION BoolToStr;
  273.         VAR
  274.             str : Str31;
  275.     BEGIN
  276.         WITH paramPtr^ DO
  277.             BEGIN
  278.                 inArgs[1] := LongInt(bool);
  279.                 inArgs[2] := ORD(@str);
  280.                 request := xreqBoolToStr;
  281.                 DoJsr(entryPoint);
  282.                 BoolToStr := str;
  283.             END;
  284.     END;
  285.  
  286.  
  287.     PROCEDURE SendCardMessage;
  288.     BEGIN
  289.         WITH paramPtr^ DO
  290.             BEGIN
  291.                 inArgs[1] := ORD(@msg);
  292.                 request := xreqSendCardMessage;
  293.                 DoJsr(entryPoint);
  294.             END;
  295.     END;
  296.  
  297.  
  298.     FUNCTION EvalExpr;
  299.     BEGIN
  300.         WITH paramPtr^ DO
  301.             BEGIN
  302.                 inArgs[1] := ORD(@expr);
  303.                 request := xreqEvalExpr;
  304.                 DoJsr(entryPoint);
  305.                 EvalExpr := Handle(outArgs[1]);
  306.             END;
  307.     END;
  308.  
  309.  
  310.     FUNCTION StringLength;
  311.     BEGIN
  312.         WITH paramPtr^ DO
  313.             BEGIN
  314.                 inArgs[1] := ORD(strPtr);
  315.                 request := xreqStringLength;
  316.                 DoJsr(entryPoint);
  317.                 StringLength := outArgs[1];
  318.             END;
  319.     END;
  320.  
  321.  
  322.     FUNCTION GetGlobal;
  323.     BEGIN
  324.         WITH paramPtr^ DO
  325.             BEGIN
  326.                 inArgs[1] := ORD(@globName);
  327.                 request := xreqGetGlobal;
  328.                 DoJsr(entryPoint);
  329.                 GetGlobal := Handle(outArgs[1]);
  330.             END;
  331.     END;
  332.  
  333.  
  334.     PROCEDURE SetGlobal;
  335.     BEGIN
  336.         WITH paramPtr^ DO
  337.             BEGIN
  338.                 inArgs[1] := ORD(@globName);
  339.                 inArgs[2] := ORD(globValue);
  340.                 request := xreqSetGlobal;
  341.                 DoJsr(entryPoint);
  342.             END;
  343.     END;
  344.  
  345.  
  346.     FUNCTION GetFieldByName;
  347.     BEGIN
  348.         WITH paramPtr^ DO
  349.             BEGIN
  350.                 inArgs[1] := ORD(cardFieldFlag);
  351.                 inArgs[2] := ORD(@fieldName);
  352.                 request := xreqGetFieldByName;
  353.                 DoJsr(entryPoint);
  354.                 GetFieldByName := Handle(outArgs[1]);
  355.             END;
  356.     END;
  357.  
  358.  
  359.     FUNCTION GetFieldByNum;
  360.     BEGIN
  361.         WITH paramPtr^ DO
  362.             BEGIN
  363.                 inArgs[1] := ORD(cardFieldFlag);
  364.                 inArgs[2] := fieldNum;
  365.                 request := xreqGetFieldByNum;
  366.                 DoJsr(entryPoint);
  367.                 GetFieldByNum := Handle(outArgs[1]);
  368.             END;
  369.     END;
  370.  
  371.  
  372.     FUNCTION GetFieldByID;
  373.     BEGIN
  374.         WITH paramPtr^ DO
  375.             BEGIN
  376.                 inArgs[1] := ORD(cardFieldFlag);
  377.                 inArgs[2] := fieldID;
  378.                 request := xreqGetFieldByID;
  379.                 DoJsr(entryPoint);
  380.                 GetFieldByID := Handle(outArgs[1]);
  381.             END;
  382.     END;
  383.  
  384.  
  385.     PROCEDURE SetFieldByName;
  386.     BEGIN
  387.         WITH paramPtr^ DO
  388.             BEGIN
  389.                 inArgs[1] := ORD(cardFieldFlag);
  390.                 inArgs[2] := ORD(@fieldName);
  391.                 inArgs[3] := ORD(fieldVal);
  392.                 request := xreqSetFieldByName;
  393.                 DoJsr(entryPoint);
  394.             END;
  395.     END;
  396.  
  397.  
  398.     PROCEDURE SetFieldByNum;
  399.     BEGIN
  400.         WITH paramPtr^ DO
  401.             BEGIN
  402.                 inArgs[1] := ORD(cardFieldFlag);
  403.                 inArgs[2] := fieldNum;
  404.                 inArgs[3] := ORD(fieldVal);
  405.                 request := xreqSetFieldByNum;
  406.                 DoJsr(entryPoint);
  407.             END;
  408.     END;
  409.  
  410.  
  411.     PROCEDURE SetFieldByID;
  412.     BEGIN
  413.         WITH paramPtr^ DO
  414.             BEGIN
  415.                 inArgs[1] := ORD(cardFieldFlag);
  416.                 inArgs[2] := fieldID;
  417.                 inArgs[3] := ORD(fieldVal);
  418.                 request := xreqSetFieldByID;
  419.                 DoJsr(entryPoint);
  420.             END;
  421.     END;
  422.  
  423.  
  424.     FUNCTION StringEqual;
  425.     BEGIN
  426.         WITH paramPtr^ DO
  427.             BEGIN
  428.                 inArgs[1] := ORD(@str1);
  429.                 inArgs[2] := ORD(@str2);
  430.                 request := xreqStringEqual;
  431.                 DoJsr(entryPoint);
  432.                 StringEqual := BOOLEAN(outArgs[1]);
  433.             END;
  434.     END;
  435.  
  436.  
  437.     PROCEDURE ReturnToPas;
  438.     BEGIN
  439.         WITH paramPtr^ DO
  440.             BEGIN
  441.                 inArgs[1] := ORD(zeroStr);
  442.                 inArgs[2] := ORD(@pasStr);
  443.                 request := xreqReturnToPas;
  444.                 DoJsr(entryPoint);
  445.             END;
  446.     END;
  447.  
  448.  
  449.     PROCEDURE ScanToReturn;
  450.     BEGIN
  451.         WITH paramPtr^ DO
  452.             BEGIN
  453.                 inArgs[1] := ORD(@scanPtr);
  454.                 request := xreqScanToReturn;
  455.                 DoJsr(entryPoint);
  456.             END;
  457.     END;
  458.  
  459.  
  460.     PROCEDURE ScanToZero;
  461.     BEGIN
  462.         WITH paramPtr^ DO
  463.             BEGIN
  464.                 inArgs[1] := ORD(@scanPtr);
  465.                 request := xreqScanToZero;
  466.                 DoJsr(entryPoint);
  467.             END;
  468.     END;
  469.  
  470.  
  471.     PROCEDURE ZeroBytes;
  472.     BEGIN
  473.         WITH paramPtr^ DO
  474.             BEGIN
  475.                 inArgs[1] := ORD(dstPtr);
  476.                 inArgs[2] := longCount;
  477.                 request := xreqZeroBytes;
  478.                 DoJsr(entryPoint);
  479.             END;
  480.     END;
  481. END.